//package com.guonl.mdata;
//
//import com.alibaba.fastjson.JSON;
//import com.guonl.enums.EventType;
//import com.guonl.event.model.UserEvent;
//import com.guonl.event.model.UserVO;
//import com.guonl.plus.entity.UserPlus;
//import com.guonl.utils.SpringEventUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.ibatis.executor.Executor;
//import org.apache.ibatis.mapping.MappedStatement;
//import org.apache.ibatis.mapping.SqlCommandType;
//import org.apache.ibatis.plugin.Interceptor;
//import org.apache.ibatis.plugin.Intercepts;
//import org.apache.ibatis.plugin.Invocation;
//import org.apache.ibatis.plugin.Signature;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Component;
//
//import java.util.Objects;
//
//@Slf4j
//@Component
//@Intercepts({
//        @Signature(method = "update", type = Executor.class, args = {
//                MappedStatement.class,
//                Object.class
//        })
//})
//public class UserChangeInterceptor implements Interceptor {
//
//    @Override
//    public Object intercept(Invocation invocation) throws Throwable {
//        Object target = invocation.getTarget();
//
//        Object proceed = invocation.proceed();
//        try {
//            Object[] args = invocation.getArgs();
//            log.info("数据变动监听-1:{}",JSON.toJSONString(args));
//            MappedStatement ms = (MappedStatement) args[0];
//            log.info("数据变动监听-2:{}",JSON.toJSONString(ms));
//            Object params = args[1];
//            log.info("数据变动监听-3:{}",JSON.toJSONString(params));
//
//            if (SqlCommandType.INSERT.equals(ms.getSqlCommandType())) {
//                insertCommond(params);
//            }
//            if (SqlCommandType.UPDATE.equals(ms.getSqlCommandType())) {
//                updateCommond(params);
//            }
//        } catch (Exception e) {
//            log.warn("entity change warning: {}", e.getMessage());
//        } finally {
//            return proceed;
//        }
//    }
//
//    private void updateCommond(Object params) {
//        if (Objects.isNull(params)) {
//            return;
//        }
//        // 更新user的事件
//        if (params instanceof UserPlus) {
//            UserPlus user = (UserPlus) params;
//            UserVO userVO = new UserVO();
//            BeanUtils.copyProperties(user, userVO);
//            UserEvent userEvent = new UserEvent(EventType.UPDATE, userVO);
//            SpringEventUtil.sentEvent(userEvent);
//            log.info("[发布事件:{}] - [事件内容:{}]", EventType.UPDATE, JSON.toJSONString(userEvent));
//        }
//
//    }
//
//    private void insertCommond(Object params) {
//        if (Objects.isNull(params)) {
//            return;
//        }
//        // 插入user的事件
//        if (params instanceof UserPlus) {
//            UserPlus user = (UserPlus) params;
//            UserVO userVO = new UserVO();
//            BeanUtils.copyProperties(user, userVO);
//            UserEvent userEvent = new UserEvent(EventType.INSERT, userVO);
//            SpringEventUtil.sentEvent(userEvent);
//            log.info("[发布事件:{}] - [事件内容:{}]", EventType.INSERT, JSON.toJSONString(userEvent));
//        }
//    }
//
//}